
/*
 * @Description: 
 * @Author: rendc
 * @Date: 2024-10-17 14:31:45
 * @LastEditors: rendc
 * @LastEditTime: 2024-10-17 15:16:16
 */
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * TestServer
 */
public class TestServer {
  public static void main(String[] args) throws IOException {
    // 1.搭建TCP服务器，指定端口
    ServerSocket server = new ServerSocket(8989);
    System.out.println("服务器：启动成功" + server);
    // 2.不断接收客户端的连接
    while (true) {
      Socket socket = server.accept();
      System.out.println("服务器：客户端连接成功" + socket);
      // 3.单独分离子线程为当前客户端提供服务
      Thread thread = new Thread() {
        @Override
        public void run() {
          // 创建输入输出流对象
          BufferedReader br = null; // 读取客户端发送的数据
          PrintStream ps = null; // 向客户端发送数据
          try {
            // 初始化输入输出流对象
            br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            ps = new PrintStream(socket.getOutputStream());
            String line = null; // 用于存储每次从客户端读取的一行数据
            // 子线程种逐行读取客户端发送的信息并处理
            while ((line = br.readLine()) != null) {
              // 3.1 输出读取内容
              System.out.println("服务器：接收到客户端的信息" + line);
              // 如果收到quit则跳出循环，结束当前子线程
              if ("quit".equals(line.trim().toLowerCase())) {
                // trim() 去掉字符串首尾空格
                // toLowerCase() 转为全小写字母
                break;
              }
              // 3.2 反转字符串
              // 创建一个 StringBuffer 来存储反转字符串
              StringBuffer buffer = new StringBuffer();
              buffer.append(line);
              // 反转 StringBuffer 的内容
              buffer.reverse();
              // 再转为字符串
              String msg = buffer.toString();
              // 3.3 将反转的字符串返回给客户端
              ps.println(msg);
            }
          } catch (Exception e) {
            // TODO: handle exception
          } finally {
            // 4.关闭资源
            try {
              if (ps != null) {
                ps.close();
              }
              if (br != null) {
                br.close();
              }
              if (socket != null && !socket.isClosed()) {
                socket.close();
              }
              System.out.println("服务器：服务已停止");
            } catch (Exception e) {
              // TODO: handle exception
            }
          }
        }
      };
      // 开启线程
      thread.start();
    }
  }
}